import axios from "axios";
import store from "@/store/index.js";
import JSONBig from "json-bigint";
import router from "@/router/index.js";
//console.log(store)
// 有可能在一个项目中存在多个指口向不同的基地址的情况，
// 定义多个axios的实例，以备不时之需
// 'http://ttapi.research.itcast.cn/

const instance1 = axios.create({
  baseURL: "http://ttapi.research.itcast.cn",
  transformResponse: [
    function(data) {
      // Do whatever you want to transform the data
      // //console.log('transformResponse', data)
      // data:就是本次请求获取的数据
      // 在这里可以对它进行进一步的处理 -- JSONBig
      // 后端返回数据可能不是 JSON 字符串，而JSONBig.parse()只能处理JSON字符串
      // 所以，为了保证代码可以正常执行，这里引入try-catch来捕获异常
      try {
        // 如果没有遇到错误，就返回 JSONBig处理之后的数据
        return JSONBig.parse(data);
      } catch (err) {
        //console.log('JSONBig转换出错', err)
        return data;
      }
    }
  ]
  // headers : {
  //     'Content-Type':'application/json',
  //     "Authorization": `Bearer ${token}`
  // }
});
instance1.interceptors.request.use(function(config) {
  //console.log(config,'axios请求信息配置')
  // 获取token
  const token = store.state.tokenInfo.token;
  if (token) {
    config.headers.Authorization = `Bearer ${token}`;
    // 请求过期之后
    //config.headers.Authorization = `Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE1NDMyODQzNjYsInVzZXJfaWQiOjF9.mLYitrKsn4E4KdQd0CNPugKrH8uQmXEQTlG_JutC8jU`
  }
  return config;
});
instance1.interceptors.response.use(
  config => {
    ///
    //console.log(config,'正常响应结果')
    return config;
  },
  async function(error) {
    // 对响应错误做点什么
    //console.dir(error)
    // 获取本次错误的代码，如果是401就做操作
    if (error.response.status === 401) {
      //console.log('error401')
      //1. 拿到 ref token
      const refreshToken = store.state.tokenInfo.refresh_token;
      // 2. 如果在我们就去请求
      if (refreshToken) {
        try {
          const result = await axios({
            url: "http://ttapi.research.itcast.cn/app/v1_0/authorizations",
            method: "PUT",
            headers: {
              Authorization: `Bearer ${refreshToken}`
            }
          });
          //console.log(result)
          const newToken = result.data.data.token;
          // 拿到 token进行保存
          // vuex
          store.commit("saveOnlyToken", newToken);

          return instance1(error.config);
        } catch {
          //console.log(err)
          router.push({
            path: "/login",
            query: {
              backto: router.currentRoute.fullPath
            }
          });
        }
      } else {
        // 跳转到登录页
        console.log(router, "路由管理");
        router.push({
          path: "/login",
          query: {
            backto: router.currentRoute.fullPath
          }
        });
      }
    } else {
      return Promise.reject(error);
    }
  }
);
const instance2 = axios.create({
  baseURL: "https://some-xxxxx.com/api/",
  timeout: 1000,
  headers: { "X-Custom-Header": "foobar" }
});

export default instance1;
export { instance2 };
